const db = require("../../db/mysql"); // 引入 数据库 配置

// const knex = require('../../knexfile');
// 创建一个对象用于保存接口的访问量计数
let apiAccessCount = {};

/**
 * 增加接口访问量
 * @param {*} url 接口地址
 */
const addAccessStatisticsLog = (url) => {
  // 统计接口的访问量
  if (apiAccessCount.hasOwnProperty(url)) {
    apiAccessCount[url]++;
  } else {
    apiAccessCount[url] = 1;
  }
};

/**
 * 统计每个接口的访问量，并将统计数据存储到数据库中
 */
const accessStatisticsFromSql = async () => {
  if (Object.keys(apiAccessCount).length === 0) return;
  const data = Object.keys(apiAccessCount).map((apiUrl) => {
    return [apiUrl, apiAccessCount[apiUrl]];
  });
  const query = "INSERT INTO apitraffic (apiUrl, visits) VALUES ?";
  try {
    // 批量插入数据，避免多次数据库操作
    await db.query(query, [data]);
    console.log(`成功统计了 ${data.length} 个接口的访问量`);
  } catch (error) {
    console.error("存储数据到数据库时出错:", error);
  }
  // 清空统计数据对象apiAccessCount
  apiAccessCount = {};
};
/**
 * 清理过期的统计数据（已统计的数据）
 */
const cleanUpOldData = async () => {
  try {
    // 删除已统计超过一段时间的数据（例如，超过3个月的数据）
    await db.query(`
      DELETE FROM apitraffic
      WHERE isSummarized = TRUE AND recordingTime < NOW() - INTERVAL 3 MONTH
    `);
    console.log("过期的统计数据已被清理");
  } catch (error) {
    console.error("清理过期数据时出错:", error);
  }
};
module.exports = {
  addAccessStatisticsLog,
  accessStatisticsFromSql,
  cleanUpOldData
};
